package com.ruoyi.project.system.controller;

import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.project.system.domain.SysDepatment;
import com.ruoyi.project.system.service.ISysDmService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author :sxt
 * @dote :19:58 2021/7/13
 */
@RestController
@RequestMapping("/system/hisdm")
public class SysDmController extends BaseController {//继承BaseController类，里面有分页相关方法和对返回值的封装。

    @Autowired
    private ISysDmService sysDmService;

    /**  查询多用get请求方式  不管是Restful风格传参还是请求体？&拼接传参
     *   新增和删除多用get请求，以JSON对象传的参数，需要用@RequestBody注解解析。
     *
     * 分页查询科室： 分配查询权限，请求路径url为/system/hisdm/list,
     * 查询前台是get方式，前台参数是query，query里面是分页查询的pageNum和pageSize还有需要进行模糊查询的参数
     * 前台进行了封装，后台使用对象来接即可。
     * 返回TableDataInfo类型，将List封装进去，
     * 请求头：省略。。。。list?pageNum=1&pageSize=10&sdName=%E5%A4%96&page=1  这是请求体拼接传参
     * @param sysDepatment
     * @return
     */
    @PreAuthorize("@ss.hasPermi('system:hisdm:query')")
    @GetMapping("/list")
    public TableDataInfo list(SysDepatment sysDepatment){
        //分页相关
       startPage();
       List<SysDepatment> list= sysDmService.selectList(sysDepatment);
       return getDataTable(list);
    }


    /**
     * 根据ID查询指定科室
     * 使用Restful风格传参:'/system/hisdm/' + sdId    sdid是选中的数据记录的row的ID
     *在后台getMapping，不需要写路径，写的是传过来的参数，用"/{sdId}"来接。多个参数使用value = { "/", "/{sdId}" }
     *使用Restful风格传的参数需要用一个注解PathVariable来接收，当接收参数名和请求参数名{sdId}不同时，需要在(@PathVariable(value = "suId") 相当于起别名
     * 也可以@PathVariable(value = "suId", required = false) required意味着参数可以不被绑定，
     * 是指：@GetMapping(value = { "/", "/{suId}" })这种情况，对应@PathVariable(value = "suId", required = false)
     * 返回：类型AjaxResult  调用AjaxResult.success()将对象封装进去。
     * 请求头：省略。。。。hisdm/101
     * @param sdId
     * @return
     */
    @GetMapping("/getById/{sdId}")
    @PreAuthorize("@ss.hasPermi('system:hisdm:query')")
    public AjaxResult getById(@PathVariable Integer sdId){
        SysDepatment sysDepatment=sysDmService.getById(sdId);
        return AjaxResult.success(sysDepatment);
    }

    /**
     * 查询所有科室详细信息：
     * 仅仅是查询数据list，不分页，没有参数
     * url：system/hisdm/getAllSdm
     * 方式 get
     * 请求头：省略。。。。/getAllSdm
     *返回：类型AjaxResult  调用AjaxResult.success()将集合封装进去。
     * @return
     */
    @GetMapping("/getAllSdm")
    public AjaxResult getAllSdm(){
        List<SysDepatment>  list=sysDmService.getAllSdm();
        return  AjaxResult.success(list);
    }

    /**
     * 新增科室:添加科室信息，传的参数是Data，form表单中的数据封装到Data中了
     * 使用的Post方式，url:/system/hisdm/add'
     * 因为前台是Request Play Load   是以JSON对象传的参数，
     * 后台使用对象来接收，要用@RequestBody注解来接，解析。
     * 请求体：。。。。/hisdm/add
     * 返回的是AjaxResult对象类型，使用toAjax(rows)将结果封装。
     *
     * @param sysDepatment
     * @return
     */
    @PreAuthorize("@ss.hasPermi('system:hisdm:add')")
    @PostMapping("/add")
    public AjaxResult addDepatment(@RequestBody SysDepatment sysDepatment){
        //获得当前操作的用户名。创建者是谁。SecurityUtils.getUsername()
        sysDepatment.setCreateBy(SecurityUtils.getUsername());
        int rows=sysDmService.addDepatment(sysDepatment);
        return toAjax(rows);
    }
    /**
     * 修改科室信息：传的参数是Data，form表单中的修改后的数据封装到Data中了
     *      * 使用的Put方式，url:/system/hisdm/update'
     *      * 因为前台是Request Play Load   是以JSON对象传的参数，
     *      * 后台使用对象来接收，要用@RequestBody注解来接，解析。
     *      * 请求体：。。。。/hisdm/update
     *      * 返回的是AjaxResult对象类型，使用toAjax(rows)将结果封装。
     *
     * 请求头：。。。/hisdm/update
     * @param sysDepatment
     * @return
     */
    @PutMapping("/update")
    @PreAuthorize("@ss.hasPermi('system:hisdm:edit')")
    public AjaxResult editDepatment(@RequestBody SysDepatment sysDepatment){
        //获得更新的用户是谁
        sysDepatment.setUpdateBy(SecurityUtils.getUsername());
        int rows= sysDmService.updateDepatment(sysDepatment);
        return toAjax(rows);
    }


    /**
     * 删除指定Id的科室；使用Restful风格传参
     * url:/system/hisdm/remove/' + sdId,* 使用的delect方式
     * 请求头：。。。hisdm/remove/117,120
     * 所以使用 DeleteMapping解析，
     *支持批量删除，sdids是个数组，可以含有多个id
     * 返回结果是是AjaxResult对象类型，使用toAjax(rows)将结果封装。
     * @param sdIds
     * @return
     */

    @DeleteMapping("/remove/{sdIds}")
    @PreAuthorize("@ss.hasAnyPermi('system:hisdm:remove')")
    public AjaxResult remove(@PathVariable Integer[] sdIds){
        int row = sysDmService.removeDm(sdIds);
        return toAjax(row);
    }


}
